[レポート] AWSを活用したユーザー認証実装パターン解説 #AWSSummit
AWS Summit Tokyo 2019 Day2 で開催された「AWSを活用したユーザー認証実装パターン解説」についてレポートします。
セッション情報
スピーカー:堀場 隆文氏 (アマゾン ウェブ サービス ジャパン株式会社)
セッション名:AWSを活用したユーザー認証実装パターン解説
AWSのマネージドな認証サービスを利用してユーザー認証をサーバレスで構築してみませんか?システムに欠かせない機能の1つがユーザー認証です。開発者は様々な製品やサービスを組み合わせてユーザー認証機能を実装します。本セッションではユーザー認証で議論に上がりやすい開発者の関心事をとりあげ、 Cognito等のAWSのマネージドな認証サービスとALB、API Gatewayなどのアプリケーション構築で利用するAWSサービスを例に挙げユーザー認証の実現方法を説明します。
セッションの概要
- 内容
- ユーザー認証の概要
- AWSの認証関連のマネージドサービスのご紹介
- ユーザー認証の実装パターン解説
- ゴール
- AWSのマネージドサービスを活用したユーザー認証の構成検討ができる
ユーザー認証の概要
- あらゆる箇所で実施される認証
- AWS管理者
- マネジメントコンソールでユーザの作成など
- セキュリティ担当
- ログの監視、監査
- 開発者
- 環境のプロビジョニング
- SSHの鍵でEC2にログイン
- パートナー
- BtoB
- 消費者
- BtoC
- 従業員
- AWS管理者
- ユーザ認証というのは
- ID、パスワードを使用して本人であることを確認すること
- 実行権限の確認を認可という
- Webアプリケーションの実装理
- 従来型のアプリ
- モダンなAPIベースのWebアプリ
- Javascriptで通信、画面の描画。SPAと呼ばれるもの
- AWSのAPIを直接呼び出すこともある
- AWSのCredentialsが必要
- クラウドベンダー提供のアプリ
- 実装はベンダー依存。従来型、APIベース等
- ユーザ認証に関連する関心事
- 強固な認証
- MFA
- ユーザビリティ
- シングルサインオン
- ガバナンス、コンプライアンス
- 構築/運用性
- 強固な認証
- マネージドサービスを活用しイノベーションに投資をしましょう
AWSの認証関連のサービス紹介
- AWSではセキュリティを再優先事項としている
- AWSのセキュリティ関連サービスポートフォリオ
- ID管理/認証/管理
- IAM
- AWS Single Sign-On
- Amazon Cognito
- AWS Diretrory Service
- Amazon Cloud Directory
- AWS Secrets Manager
- AWS Organizations
- AWS Resource Access Manager
- インフラ保護
- VPC
- AWS Shield
- AWS WAF
- Amazon Inspector
- AWS Systems Manager
- データ保護
- Amazon Macie
- KMS
- AWS CloudHSM
- AWS Certificate Manager
- 発見的統制
- AWS Security Hub
- Amazon GuardDuty
- AWS CloudTrail
- AWS Config
- Amazon CloudWatch
- VPC Flow Logs
- 訂正的統制
- AWS Config Rules
- AWS Lambda
- ID管理/認証/管理
- ID管理/認証/認可に関連するサービス
- ID管理 & 認証
- AWS Single Sign-On
- 複数のAWSアカウントやビジネスアプリへのシングルサインオンを実現
- AWS Directory Service
- マネージド型Microsoft Active Directory
- Amazon Cognito
- カスタムアプリやAWS APIの認証、認可を提供
- Amazon Cloud Directory
- 様々なユースケースに対応するディレクトリ機能を提供
- 認可
- IAM
- AWS APIに対するアクセス制御
- AWS Secrets Manager
- パスワードのライフサイクル管理
- IAM
- リソース管理
- AWS Organizations
- 複数のAWSアカウントのリソースをポリシーで制御
- AWS Resource Access Manager
- 複数のAWSアカウントへのリソース共有を制御
- AWS Organizations
- ID管理 & 認証
- AWSアカウントは増加していく、マルチアカウント
- 100こアカウントがある場合パスワードを管理できない
- Webアプリケーションで利用する認証サービス
- AWS SSO
- Amazon Cognito
- AWS SSOの特徴
- 強固な認証
- MFA
- パスワードポリシー
- ユーザビリティ
- ガバナンス、コンプライアンス
- AD対応
- CloudTrail対応(監査)
- 構築/運用
- プログラミング不要
- マネージドで負荷軽減
- 強固な認証
- Amazon Cognitoの特徴
- 強固な認証
- MFA
- パスワードポリシー
- AWS Credentialsの発行機能
- ユーザビリティ
- ソーシャル連携
- Amazon、Facebook、Googleと簡単に連携できる
- ソーシャル連携
- ガバナンス、コンプライアンス
- 外部IDプロバイダと連携
- CloudTrail対応(監査)
- 構築/運用
- プログラミング不要
- マネージドで負荷軽減
- ユーザプールとIDプール
- 認証する場合はユーザープールを使用する
- 認証関連機能
- ユーザディレクトリ
- 外部IDプロバイダ連携
- IDプール
- AWS Credentials発行
- 外部IDプロバイダ連携
- 認証する場合はユーザープールを使用する
- 強固な認証
AWSを活用したユーザ認証実装パターン解説
- 従来型(HTMLベース)のWebアプリ
- 認証サービスの活用パターン
- ALBとAmazon Cognito、OIDC準拠IDプロバイダと連携
- Amazon Cognitoの活用時のフロー
- ALBへアクセス
- ALBがユーザープールへリダイレクト
- Amazon Cognitoが認証画面を表示
- ユーザがID、パスワードを入力し送信
- Amazon Cognitoがトークンを送信し、ALBへリダイレクト
- ユーザがALBへアクセスしコンテンツを利用
- カスタム実装するパターン
- 認証サービス要件/データ保管場所などによりカスタム実装が必要な場合
- NLB + EC2 + Amazon RDS
- NLB + EC2 +オンプレミスDB
- 認証サービスの活用パターン
- BモダンなAPIベースのアプリの場合(SPA)
- APIをAmazon API Gatewayで提供している場合
- Amazon API Gatewayは3種類の認証方式をサポート
- Amazon Cognito(ユーザプール):ユーザプールや外部IDプロバイダで認証する場合
- AWS IAM:IAMユーザ/IAMロールやフェデレーションを利用時
- AWS Lmbada:独自ロジックで認証する場合
- Amazon Cognito活用時のフロー
- S3へアクセスし認証画面を表示
- ユーザプールにアクセス、トークンをもらう
- クライアントがAmazon API Gatewayへアクセス
- API Gatewayがトークンをチェック
- Amazon API Gatewayは3種類の認証方式をサポート
- APIを独自実装で提供している場合
- アプリケーションロジック内でのカスタム認証を実装
- NLB + EC2 + RDS
- NLB + EC2 + オンプレミスDB
- AWSのAPIを実行する場合
- Amazon Cognito IDプールを利用する方法
- IDプールは主に以下の二種類の「ユーザー認証」情報を利用してAWS Credentialsを発行
- ユーザプール + IDプール で認証
- 外部IDプロバイダ + IDプール で認証
- AWS API 利用時のフロー
- S3へアクセスし認証画面を表示
- ユーザプールにアクセス、トークンをもらう
- IDプールにトークンを渡すことでAWS Credentialsを取得
- AWS Credentialsを使用し、DynamoDBやS3、API Gatewayにアクセス
- IDプールは主に以下の二種類の「ユーザー認証」情報を利用してAWS Credentialsを発行
- Amazon Cognito IDプールを利用する方法
- IDプールによるAWS Credentials発行
- 事前にIAMロールの割り当てルールを設定
- IAMロールの割当方法
- デフォルトのロール
- ルールベース
- トークン内指定
- 未認証
- IAMロールの割当方法
- 割り当てられたIAMロールを利用してAWS Credentialsを生成
- Aws Amplifyで簡単に動きを試せる
- 事前にIAMロールの割り当てルールを設定
- APIをAmazon API Gatewayで提供している場合
- クラウドベンダーが提供するクラウドアプリ
- シングルサインオンを提供したい場合
- AWS SSO
- 100種類移譲のアプリやSAML2.0対応のアプリケーションを統合可能
- 複数のAWSアカウントの統合も可能
- マネージドなディレクトリサービスも提供
- AWS SSO利用時のフロー
- AWS SSOへアクセス
- AWS SSOは認証画面を応答
- ユーザはID、パスワードを送信
- AWS SSOはポータル画面を応答
- ユーザはポータル画面から利用するアプリを選択
- AWS SSO
- シングルサインオンを提供したい場合
まとめ
- カスタム実装も選択肢としてはあるということを覚えておく
- マネージドサービスを活用しイノベーションに投資を
- ユースケースに適した実装方法の選択を